In [1]:
%pylab inline
import numpy as np #  convert list to array

import matplotlib.pyplot as plt
Populating the interactive namespace from numpy and matplotlib

Mátrixleképezés paraxiális közelítésben

http://cserti.web.elte.hu/optika.php

Három elemi 2x2-es mátrixból tetszőleges optika rendszer leképezése számolható paraxiális közelítésben.

A három elemi mátrix:

1) Szabad terjedés:

\begin{equation} {\bf M}_{\textrm{free}}= \left( \begin{array}{cc} 1 & \frac{d}{n} \\ 0 & 1 \end{array} \right). \nonumber \end{equation}

2) Törés:

\begin{equation} {\bf M}_{\textrm{törés}}= \left( \begin{array}{cc} 1 & 0 \\ \frac{n_1-n_2}{R} & 1 \end{array} \right). \nonumber \end{equation}

3) Visszaverődés gömbtükörről:

\begin{equation} {\bf M}_{\textrm{tükör}}= \left( \begin{array}{cc} 1 & 0 \\ -\frac{2n}{R} & -1 \end{array} \right). \nonumber \end{equation}

A törőfelület görbületi sugara $R$, a felület a bal és jobb oldalán $n_1$ és $n_2$ a törésmutató. Az előjel konvenciók a jegyzetben találhatók.

Feltevés: a fénysugár balról jobbra halad, ezért az $M$ mátrixok szorzása jobbról balra történik.

Különböző anyagok törésmutatója itt található: Filmetrics

In [2]:
def Ttores(nbe,nki,Rk):
    res=(matrix([[1,0],
                [(nbe - nki) / Rk, 1]]))
    return(res)

def Tfree(nk,d):
    res=(matrix([[1,d/nk],
                [0, 1]]))
    return(res)

def Ttukor(nk,Rt):
    res=(matrix([[1,0],
                [-2*nk/ Rt, -1]]))
    return(res)
    
def focus(A):
    f=-1/A[1,0]  # a fokusztavolsag a fosiktol merve
    detA=det(A)
    
    h1=(detA-A[1,1])/A[1,0] # pozitiv, ha a lencse bal oldalatol merve balra (kint) van a bal oldali fosik
    h2=(detA-A[0,0])/A[1,0] # pozitiv, ha a lencse jobb oldalatol merve jobbra (kint) van a jobb oldali fosik
    
    #  A Hecht konyveben a fosikok helye: h1, h2 which are positive when the planes 
    #  lie to the right/left of their respective vertices.
    
    
    return(f,h1,h2)

1. példa: Zeiss Tessar lens, négy különböző lencse

The Zeiss Tessar is a famous photographic lens, invented in 1902 by Paul Rudolph of the Carl Zeiss optical company.

Ábra: itt és itt.

Számolás részletei*: Eugene Hecht: Optics (4th Edition, 2002), lásd még: pp. 250-251, figure 6.10

A lencsék paraméterei és a köztük lévő távolságok itt: A. Nussbaum & R. A. Phillips: Modern optika mérnököknek és kutatóknak (Műszaki Könykiadó, 1982.), 39. oldal, 1-19. ábra és alatta a táblázat.

*This particular example was chosen primarily because Nussbaum's book Geometric Optics contains a simple Fortran computer program written specifically for this lens. It would be almost silly to evaluate the system matrix by hand.

In [3]:
ni = (1.6116, 1.6053, 1.5123, 1.6116)  # a lencsek toresmutatoi
Ri = (1.628, -27.57, -3.457, 1.582, 10000000, 1.920, -2.4) # a lencsek gorbuleti sugarai
di = (0.357, 0.189, 0.081, 0.325, 0.217, 0.396) #  lencsek kozti tavolsagok

T1 = Ttores(1, ni[0], Ri[0])
T2 = Tfree(ni[0], di[0])
T3 = Ttores(ni[0], 1, Ri[1])
T4 = Tfree(1, di[1])
T5 = Ttores(1, ni[1], Ri[2])
T6 = Tfree(ni[1], di[2])
T7 = Ttores(ni[1], 1, Ri[3])
T8 = Tfree(1, di[3])
T9 = Ttores(1, ni[2], Ri[4])
T10 = Tfree(ni[2], di[4])
T11 = Ttores(ni[2], ni[3], Ri[5])
T12 = Tfree(ni[3], di[5])
T13 = Ttores(ni[3], 1, Ri[6])
In [4]:
T = T13 * T12 * T11 * T10 * T9 * T8 * T7 * T6 * T5 *T4 * T3 *T2 * T1
print("T_total = ",T)
print("\ncheck, det(T) = ",det(T))

f,h1,h2=focus(T)
print("f = ",f)
print("h1 = ",h1)
print("h2 = ",h2)
print("A fókusztávolság az utolsó lencse szélétől mérve  = ",f-abs(h2))
T_total =  [[ 0.86753838  1.33867981]
 [-0.19689498  0.84886234]]

check, det(T) =  1.0000000000000002
f =  5.078849523946025
h1 =  -0.7676054491482768
h2 =  -0.6727526209602471
A fókusztávolság az utolsó lencse szélétől mérve  =  4.406096902985778

2. példa: Nussbaum \& Phillips könyvből

A. Nussbaum & R. A. Phillips: Modern optika mérnököknek és kutatóknak (Műszaki Könykiadó, 1982.), 48. oldal, a 2-4. ábra számolása paraxiális közelítésben. Az alábbi eredmény egyezik a fenti könyvbelivel.

In [5]:
t, R, n, t1v, k =200, 50, 1.5, 15, 45.63
alpha= arcsin(0.1)

TT=Ttores(n,1,-R)*Tfree(n,t1v)*Ttores(1,n,R)*Tfree(1,t)

TT, det(TT), focus(TT), TT[1,0]
Out[5]:
(matrix([[ 9.0e-01,  1.9e+02],
         [-1.9e-02, -2.9e+00]]),
 1.0,
 (52.63157894736841, -205.26315789473685, -5.26315789473684),
 -0.019000000000000003)

Az alábbi eredmény egyezik a könybelivel.

In [6]:
vv=TT*matrix([[0],[alpha]])
vv
Out[6]:
matrix([[19.03181002],
        [-0.29048552]])
In [7]:
kiszog=vv[1,0]
lv= abs(vv[0,0]/vv[1,0])
vv[1,0],kiszog, sin(kiszog), lv
Out[7]:
(-0.2904855213685235,
 -0.2904855213685235,
 -0.28641743926047364,
 65.51724137931032)

3. példa: gömblencse

In [8]:
n1,n2 = (1,3/2)

R1=1
cent1=array([0,0])  #  cent: a 1. kor kozeppontja
R2=-1
cent2=cent1 #  cent: a 2. kor kozeppontja

T1 = Ttores(n1, n2, R1)
T2 = Tfree(n2, 2*R1)
T3 = Ttores(n2, n1, R2)

T = T3 *T2 * T1
print("T_total = ",T)
print("\ncheck, det(T) = ",det(T))

f,h1,h2=focus(T)
print("f = ",f)
print("h1 = ",h1)
print("h2 = ",h2)
print("A fókusztávolság az utolsó lencse szélétől mérve  = ",f+h2)
T_total =  [[ 0.33333333  1.33333333]
 [-0.66666667  0.33333333]]

check, det(T) =  1.0000000000000002
f =  1.4999999999999998
h1 =  -1.0000000000000002
h2 =  -1.0000000000000002
A fókusztávolság az utolsó lencse szélétől mérve  =  0.49999999999999956
In [9]:
n1,n2 = (1,3/2)

R1=1
cent1=array([0,0])  #  cent: a 1. kor kozeppontja
R2=-1
cent2=array([-1.9*abs(R2),0]) #  cent: a 2. kor kozeppontja
V1=cent1[0]-abs(R1)
V2=cent2[0]+abs(R2)
d=V2-V1
print("cent1,cent2, V1,V2, d = ",cent1,cent2, V1,V2, d)

T1 = Ttores(n1, n2, R1)
T2 = Tfree(n2, d)
T3 = Ttores(n2, n1, R2)

T = T3 *T2 * T1
print("T_total = ",T)
print("\ncheck, det(T) = ",det(T))

f,h1,h2=focus(T)
print("f = ",f)
print("h1 = ",h1)
print("h2 = ",h2)
print("A fókusztávolság az utolsó lencse szélétől mérve  = ",f+h2)
cent1,cent2, V1,V2, d =  [0 0] [-1.9  0. ] -1 -0.8999999999999999 0.10000000000000009
T_total =  [[ 0.96666667  0.06666667]
 [-0.98333333  0.96666667]]

check, det(T) =  1.0
f =  1.0169491525423728
h1 =  -0.033898305084745756
h2 =  -0.033898305084745756
A fókusztávolság az utolsó lencse szélétől mérve  =  0.983050847457627
In [10]:
n1,n2 = (1,3/2)

R1=1
cent1=array([0,0])  #  cent: a 1. kor kozeppontja
R2=-1
cent2=array([-1.*abs(R2),0]) #  cent: a 2. kor kozeppontja

V1=cent1[0]-abs(R1)
V2=cent2[0]+abs(R2)
d=V2-V1
print("cent1,cent2, V1,V2, d = ",cent1,cent2, V1,V2, d)

T1 = Ttores(n1, n2, R1)
T2 = Tfree(n2, d)
T3 = Ttores(n2, n1, R2)

T = T3 *T2 * T1
print("T_total = ",T)
print("\ncheck, det(T) = ",det(T))

f,h1,h2=focus(T)
print("f = ",f)
print("h1 = ",h1)
print("h2 = ",h2)
print("A fókusztávolság az utolsó lencse szélétől mérve  = ",f+h2)
cent1,cent2, V1,V2, d =  [0 0] [-1.  0.] -1 0.0 1.0
T_total =  [[ 0.66666667  0.66666667]
 [-0.83333333  0.66666667]]

check, det(T) =  1.0
f =  1.2
h1 =  -0.3999999999999999
h2 =  -0.3999999999999999
A fókusztávolság az utolsó lencse szélétől mérve  =  0.8

4. példa: Hecht page 245 (p 252)

In [11]:
n1,n2 = (1,3/2)

R1=20
cent1=array([0,0])  #  cent: a 1. kor kozeppontja
R2=-40
cent2=array([1-R1-abs(R2),0]) #  cent: a 2. kor kozeppontja

V1=cent1[0]-abs(R1)
V2=cent2[0]+abs(R2)
d=V2-V1
print("cent1,cent2, V1,V2, d = ",cent1,cent2, V1,V2, d)

T1 = Ttores(n1, n2, R1)
T2 = Tfree(n2, d)
T3 = Ttores(n2, n1, R2)

T = T3 *T2 * T1
print("T_total = ",T)
print("\ncheck, det(T) = ",det(T))

f,h1,h2=focus(T)
print("f = ",f)
print("h1 = ",h1)
print("h2 = ",h2)

so=30+abs(h1)
si= f*so/(so-f)
print("H1 fősíktól mérve a tárgytávolság = ",so)
print("H2 fősíktól mérve a képtávolság = ",si)
cent1,cent2, V1,V2, d =  [0 0] [-59   0] -20 -19 1
T_total =  [[ 0.98333333  0.66666667]
 [-0.03729167  0.99166667]]

check, det(T) =  0.9999999999999999
f =  26.81564245810056
h1 =  -0.2234636871508342
h2 =  -0.4469273743016744
H1 fősíktól mérve a tárgytávolság =  30.223463687150833
H2 fősíktól mérve a képtávolság =  237.82397655462987

5. példa: Hecht page 246 (p 253)

In [12]:
f1=-30
f2=20
d=10

T1=(matrix([[1,0],
                [-1/ f1, 1]]))
T2 = Tfree(1, d)
T3=(matrix([[1,0],
                [-1/ f2, 1]]))

T=T3*T2*T1

print("T_total = ",T)
print("\ncheck, det(T) = ",det(T))

f,h1,h2=focus(T)
print("f = ",f)
print("h1 = ",h1)
print("h2 = ",h2)
T_total =  [[ 1.33333333 10.        ]
 [-0.03333333  0.5       ]]

check, det(T) =  1.0
f =  29.999999999999993
h1 =  -14.999999999999996
h2 =  9.999999999999996

6. példa:

A. Gerrard, J. M. Burch: Introduction to Matrix Methods in Optics (Dover Books on Physics), John Wiley & Sons, Ltd., London, 1975 edition

http://store.doverpublications.com/0486680444.html

A glass rod 2.8 cm long and of index 1.6 has both ends ground to spherical surfaces of radius 2.4 cm, and convex to the air. An object 2 cm tall is located on the axis, in the air, 8 cm to the left of the left-hand vertex. (See Figure II.ll). Find the position and size of the final image.

on page 55, Problem 2.

In [13]:
n1,n2 = (1,1.6)

R1=2.4
cent1=array([0,0])  #  cent: a 1. kor kozeppontja
R2=-R1
d=2.8

T1 = Ttores(n1, n2, R1)
T2 = Tfree(n2, d)
T3 = Ttores(n2, n1, R2)

T=T3*T2*T1

print("T_total = ",T)
print("\ncheck, det(T) = ",det(T))

print('\nMinden távolság cm-ben\n')

f,h1,h2=focus(T)
print("f = ",f)
print("h1 = ",h1)
print("h2 = ",h2)

so=8+abs(h1)
si= f*so/(so-f)

print("H1 fősíktól mérve a tárgytávolság = ",so)
print("H2 fősíktól mérve a képtávolság = ",si)
print("A rúd jobb szélétől mérve a képtávolság = ",si-abs(h2))
print("Nagyítás = ",-si/so)
print("Kép mérete (fordított állású) = ",-si/so*2)
T_total =  [[ 0.5625    1.75    ]
 [-0.390625  0.5625  ]]

check, det(T) =  1.0000000000000002

Minden távolság cm-ben

f =  2.559999999999999
h1 =  -1.1200000000000003
h2 =  -1.1200000000000003
H1 fősíktól mérve a tárgytávolság =  9.120000000000001
H2 fősíktól mérve a képtávolság =  3.5590243902439003
A rúd jobb szélétől mérve a képtávolság =  2.4390243902439
Nagyítás =  -0.3902439024390241
Kép mérete (fordított állású) =  -0.7804878048780483